home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / Hardware / FreeWheel / PrefsWin.c < prev    next >
C/C++ Source or Header  |  2000-03-12  |  9KB  |  315 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #include <exec/types.h>
  6. #include <intuition/intuition.h>
  7. #include <intuition/screens.h>
  8.  
  9. #include <clib/exec_protos.h>
  10. #include <clib/intuition_protos.h>
  11. #include <clib/gadtools_protos.h>
  12.  
  13. #include "Cx.h"
  14. #include "Prefs.h"
  15. #include "GUI.h"
  16. #include "WheelMouse.h"
  17.  
  18. #include "PrefsWin.h"
  19.  
  20. #define WINDOWMODE_ID 1
  21. #define MMBMODE_ID 2
  22. #define FOURTHMODE_ID 3
  23. #define SAVE_ID 4
  24. #define HIDE_ID 5
  25. #define QUIT_ID 6
  26. #define HOTKEY_ID 7
  27. #define XSPEED_ID 8
  28. #define YSPEED_ID 9
  29. #define CLICKFRONT_ID 10
  30. #define CLICKBACK_ID 11
  31.  
  32. BOOL PrefsWin_Show(struct PrefsWinContext *pwc);
  33. void PrefsWin_Hide(struct PrefsWinContext *pwc);
  34. BOOL PrefsWin_Handle(struct PrefsWinContext *pwc,unsigned long sigs);
  35. void PrefsWin_Dispose(struct PrefsWinContext *pwc);
  36.  
  37. extern struct WheelMouseContext *MyWM;
  38. extern struct CxContext *MyCx;
  39.  
  40. char *GadgetTitles[]=
  41. {
  42.   "Scroll window:",
  43.   "Middle button:",
  44.   "Fourth button:",
  45.   "Mouse speed X: %ld%%",
  46.   "Mouse speed Y: %ld%%",
  47.   "Click to front:",
  48.   "Hot key:",
  49.   "Click to back:",
  50.   NULL
  51. };
  52.  
  53. #define SCROLLWINDOW_TITLE 0
  54. #define MMBMODE_TITLE 1
  55. #define FOURTHMODE_TITLE 2
  56. #define MOUSESPEEDX_TITLE 3
  57. #define MOUSESPEEDY_TITLE 4
  58. #define CLICKFRONT_TITLE 5
  59. #define HOTKEY_TITLE 6
  60. #define CLICKBACK_TITLE 7
  61.  
  62. BOOL PrefsWin_Show(struct PrefsWinContext *pwc)
  63. {
  64.   struct Gadget *gg;
  65.   int width,width2,leftedge,topedge;
  66.  
  67.   if(pwc->Visible)
  68.     return(FALSE);
  69.  
  70.   if(!(pwc->Screen=LockPubScreen(NULL)))
  71.     return(FALSE);
  72.  
  73.   if(!(pwc->GUI=GUI_Create(pwc->Screen,pwc->Screen->Font,8,8)))
  74.   {
  75.     pwc->Hide(pwc);
  76.     return(FALSE);
  77.   }
  78.  
  79.   GUI_StringTab(pwc->GUI,GadgetTitles);
  80.  
  81.   width=GUI_MaxStringWidth(pwc->GUI,MyWM->WindowModeNames);
  82.   width2=GUI_MaxStringWidth(pwc->GUI,MyWM->MMBModeNames);
  83.   if(width2>width) width=width2;
  84.   width2=GUI_MaxStringWidth(pwc->GUI,MyWM->FourthButtonModeNames);
  85.   if(width2>width) width=width2;
  86.  
  87.   pwc->GUI->InnerWidth=pwc->GUI->TabStop+width+64;
  88.  
  89.   gg=GUI_BuildCycleGadget(pwc->GUI,GadgetTitles[SCROLLWINDOW_TITLE],MyWM->WindowModeNames,WINDOWMODE_ID);
  90.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  91.                     pwc->Prefs->GetLong(pwc->Prefs,"WindowMode",0),TAG_DONE);
  92.  
  93.   gg=GUI_BuildCycleGadget(pwc->GUI,GadgetTitles[MMBMODE_TITLE],MyWM->MMBModeNames,MMBMODE_ID);
  94.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  95.                     pwc->Prefs->GetLong(pwc->Prefs,"MMBMode",0),TAG_DONE);
  96.  
  97.   gg=GUI_BuildCycleGadget(pwc->GUI,GadgetTitles[FOURTHMODE_TITLE],MyWM->FourthButtonModeNames,FOURTHMODE_ID);
  98.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCY_Active,
  99.                     pwc->Prefs->GetLong(pwc->Prefs,"FourthMode",0),TAG_DONE);
  100.  
  101.   gg=GUI_BuildSliderFormatted(pwc->GUI,GadgetTitles[MOUSESPEEDX_TITLE],33,300,100,XSPEED_ID);
  102.   GT_SetGadgetAttrs(gg,NULL,NULL,GTSL_Level,
  103.                     pwc->Prefs->GetLong(pwc->Prefs,"XMouseSpeed",100),TAG_DONE);
  104.  
  105.   gg=GUI_BuildSliderFormatted(pwc->GUI,GadgetTitles[MOUSESPEEDY_TITLE],33,300,100,YSPEED_ID);
  106.   GT_SetGadgetAttrs(gg,NULL,NULL,GTSL_Level,
  107.                     pwc->Prefs->GetLong(pwc->Prefs,"YMouseSpeed",100),TAG_DONE);
  108.  
  109.   gg=GUI_BuildCheckBox(pwc->GUI,GadgetTitles[CLICKFRONT_TITLE],CLICKFRONT_ID);
  110.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  111.                     pwc->Prefs->GetLong(pwc->Prefs,"ClickFront",TRUE),TAG_DONE);
  112.  
  113.   gg=GUI_BuildCheckBox(pwc->GUI,GadgetTitles[CLICKBACK_TITLE],CLICKBACK_ID);
  114.   GT_SetGadgetAttrs(gg,NULL,NULL,GTCB_Checked,
  115.                     pwc->Prefs->GetLong(pwc->Prefs,"ClickBack",FALSE),TAG_DONE);
  116.  
  117.   gg=GUI_BuildString(pwc->GUI,GadgetTitles[HOTKEY_TITLE],255,HOTKEY_ID);
  118.   GT_SetGadgetAttrs(gg,NULL,NULL,GTST_String,
  119.                     pwc->Prefs->GetString(pwc->Prefs,"Hot Key","ctrl alt m"),TAG_DONE);
  120.  
  121.   GUI_StringTab(pwc->GUI,NULL);
  122.  
  123.   width=pwc->GUI->InnerWidth;
  124.   leftedge=pwc->GUI->BorderLeft;
  125.   topedge=pwc->GUI->InnerHeight;
  126.  
  127.   pwc->GUI->InnerWidth=width/3;
  128.   GUI_BuildWideButton(pwc->GUI,"Save",SAVE_ID);
  129.  
  130.   pwc->GUI->InnerHeight=topedge;
  131.   pwc->GUI->BorderLeft+=width/3;
  132.   GUI_BuildWideButton(pwc->GUI,"Hide",HIDE_ID);
  133.  
  134.   pwc->GUI->InnerHeight=topedge;
  135.   pwc->GUI->BorderLeft+=width/3;
  136.   GUI_BuildWideButton(pwc->GUI,"Quit",QUIT_ID);
  137.  
  138.   pwc->GUI->BorderLeft=leftedge;
  139.   pwc->GUI->InnerWidth=width;
  140.  
  141.   if(!(pwc->GUI->LastGadget))
  142.   {
  143.     pwc->Hide(pwc);
  144.     return(FALSE);
  145.   }
  146.  
  147.   if(!(pwc->Window=OpenWindowTags(NULL,WA_Left,0,
  148.                                        WA_Top,1+pwc->Screen->BarHeight,
  149.                                        WA_InnerWidth,pwc->GUI->InnerWidth,
  150.                                        WA_InnerHeight,pwc->GUI->InnerHeight,
  151.                                        WA_IDCMP,IDCMP_REFRESHWINDOW|IDCMP_CLOSEWINDOW|pwc->GUI->IDCMP,
  152.                                        WA_SizeGadget,FALSE,WA_DragBar,TRUE,
  153.                                        WA_DepthGadget,TRUE,WA_CloseGadget,TRUE,
  154.                                        WA_NewLookMenus,TRUE,
  155.                                        WA_Activate,FALSE,
  156.                                        WA_Title,"FreeWheel V1.1",TAG_DONE)))
  157.   {
  158.     pwc->Hide(pwc);
  159.     return(FALSE);
  160.   }
  161.  
  162.   pwc->GUI->Attach(pwc->GUI,pwc->Window);
  163.  
  164.   pwc->Signals=1<<pwc->Window->UserPort->mp_SigBit;
  165.  
  166.   pwc->Visible=TRUE;
  167.   return(TRUE);
  168. }
  169.  
  170.  
  171. void PrefsWin_Hide(struct PrefsWinContext *pwc)
  172. {
  173.   if(pwc->Window)
  174.     CloseWindow(pwc->Window);
  175.   pwc->Window=FALSE;
  176.   pwc->Signals=0;
  177.  
  178.   if(pwc->GUI)
  179.     pwc->GUI->Dispose(pwc->GUI);
  180.   pwc->GUI=NULL;
  181.  
  182.   if(pwc->Screen)
  183.     UnlockPubScreen(NULL,pwc->Screen);
  184.   pwc->Screen=FALSE;
  185.  
  186.   if(pwc->Visible)
  187.     pwc->Visible=FALSE;
  188. }
  189.  
  190.  
  191. void PrefsWin_Dispose(struct PrefsWinContext *pwc)
  192. {
  193.   if(pwc)
  194.   {
  195.     if(pwc->Visible)
  196.       pwc->Hide(pwc);
  197.     free(pwc);
  198.   }
  199. }
  200.  
  201.  
  202. struct PrefsWinContext *PrefsWin_Create(struct PrefsGroup *pg)
  203. {
  204.   struct PrefsWinContext *pwc;
  205.   if(!(pwc=malloc(sizeof(struct PrefsWinContext))))
  206.     return(NULL);
  207.   memset(pwc,0,sizeof(struct PrefsWinContext));
  208.   pwc->Dispose=PrefsWin_Dispose;
  209.   pwc->Handle=PrefsWin_Handle;
  210.   pwc->Hide=PrefsWin_Hide;
  211.   pwc->Show=PrefsWin_Show;
  212.  
  213.   pwc->Prefs=pg;
  214.  
  215.   return(pwc);
  216. }
  217.  
  218.  
  219. BOOL PrefsWin_Handle(struct PrefsWinContext *pwc,unsigned long sigs)
  220. {
  221.   BOOL cont=TRUE,close=FALSE;
  222.   long value;
  223.   char *string;
  224.   if(pwc)
  225.   {
  226.     if(sigs&pwc->Signals)
  227.     {
  228.       struct IntuiMessage *im;
  229.       while(im=GT_GetIMsg(pwc->Window->UserPort))
  230.       {
  231.         int class,code,id;
  232.         struct Gadget *gg;
  233.         class=im->Class;
  234.         code=im->Code;
  235.         switch(class)
  236.         {
  237.           case IDCMP_GADGETUP:
  238.             gg=(struct Gadget *)im->IAddress;
  239.             id=gg->GadgetID;
  240.             GT_ReplyIMsg(im);
  241.             switch(id)
  242.             {
  243.               case HOTKEY_ID:
  244.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTST_String,&string,TAG_DONE);
  245.                 pwc->Prefs->SetString(pwc->Prefs,"Hot Key",string);
  246.                 MyCx->SetHotKey(MyCx,string);
  247.                 break;
  248.               case WINDOWMODE_ID:
  249.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  250.                 pwc->Prefs->SetLong(pwc->Prefs,"WindowMode",value);
  251.                 MyWM->WindowMode=value;
  252.                 break;
  253.               case MMBMODE_ID:
  254.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  255.                 pwc->Prefs->SetLong(pwc->Prefs,"MMBMode",value);
  256.                 MyWM->MMBMode=value;
  257.                 break;
  258.               case FOURTHMODE_ID:
  259.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCY_Active,&value,TAG_DONE);
  260.                 pwc->Prefs->SetLong(pwc->Prefs,"FourthMode",value);
  261.                 MyWM->FourthButtonMode=value;
  262.                 break;
  263.               case XSPEED_ID:
  264.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTSL_Level,&value,TAG_DONE);
  265.                 pwc->Prefs->SetLong(pwc->Prefs,"XMouseSpeed",value);
  266.                 MyWM->MouseSpeedX=value;
  267.                 break;
  268.               case YSPEED_ID:
  269.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTSL_Level,&value,TAG_DONE);
  270.                 pwc->Prefs->SetLong(pwc->Prefs,"YMouseSpeed",value);
  271.                 MyWM->MouseSpeedY=value;
  272.                 break;
  273.               case CLICKFRONT_ID:
  274.                 GT_GetGadgetAttrs(gg,pwc->Window,NULL,GTCB_Checked,&value,TAG_DONE);